PHP 8! Sve što treba da znate!

PHP 8 je zvanično objavljen za sve korisnike 26. novembra 2020.

Ovo novo ažuriranje donosi brojne moćne funkcije i optimizacije jezika. Iako su mnogi RFC-ovi već prihvaćeni i uvedeni, vreme je da se uronimo u neke od najuzbudljivijih dodataka koji su PHP učinili bržim i sigurnijim.

Možda ćete morati da poboljšate svoj kod kako bi mogao da radi na PHP-u 8. Ako ste ostali u toku sa novim izdanjima, ažuriranje ne bi trebalo da bude preteško jer je većina izmjena zastarela ranije na 7. verziji. 

Osim što prouzrokuje promene, pored brzine, PHP 8.0 donosi nove funkcije kao što su dugo očekivani JIT kompajler, atributi i još mnogo toga. 

 

-PHP 8 funkcije koje će poboljšati vaše performanse

Kao dugogodišnji PHP programer, zadovoljstvo je videti kako PHP 8 donosi toliko korisnih ažuriranja, poput "Named Arguments" koji vam omogućavaju da validirate podatke u funkciji na osnovu njihovog imena argumenta umesto redosleda argumenata. I onda, u prethodnim verzijama, jedini način da se deklarišu tipovi unije mogao je biti naveden samo u komentarima phpdoc-a, ali sada se to može napraviti direktno.

Svi ovi atributi su neverovatno poboljšanje API-ja refleksije. U nastavku pregled na neke od sjajnih novih PHP 8 funkcija:

 

-Just-In-Time (JIT) kompajler

JIT je već bio dostupan u PHP-u od v7.4 kao alatka za testiranje, ali su njegove performanse i upotrebljivost znatno poboljšane u verziji PHP 8. Po dizajnu, JIT je bio dostupan u onemogućenom režimu za sprovođenje eksperimenata i procenu drugih varijabli u PHP-u 7.4.

JIT će povećati brzinu PHP 8 aplikacija zbog načina na koji upravlja kompilacijom PHP skripti. Veoma je jednostavan u smislu V8, HHVM, PiPi i drugog modernog PHP JIT-a, ali podiže stepen ukupne PHP složenosti, mogućnost novih grešaka i troškove kreiranja i održavanja.

Sada u PHP mehanizmu, novi i poboljšani JIT kompajler vam omogućava brže izvršavanje koda aplikacije u poređenju sa tradicionalnim interpretatorom.

 

-Operator nulsafe

Ovaj RFC predlaže novi nullsafe operator ?-> sa potpunim kratkim spojem.

Ako već poznajete "null coalescing", već ste upoznati sa njegovim slabostima: pozivi metoda ne rade. Pomoglo bi ako biste umesto toga imali međuprovere ili biste se oslanjali na opcione pomoćnike koje neki okviri pružaju:

 

-Imenovani argumenti


Sa imenovanim argumentima, programeri mogu da proslede vrednosti funkciji definisanjem imena vrednosti tako da ne morate da uzimate u obzir njihov redosled. Takođe možete zanemariti opcione parametre. Imenovani argumenti čine kod lakšim za razumevanje jer su imena argumenata deskriptivna.

-Atributi


Atributi, obično poznati kao napomene na drugim jezicima, pružaju način za dodavanje metapodataka klasama bez potrebe za raščlanjivanjem blokova dokumenata.

Evo primera:

-Podudaranje izraza


Izuzetna karakteristika koju sam mogao da iskusim sa PHP 8, koja je olakšala kodiranje, su izrazi podudaranja. Programeri sada mogu da vrate vrednost na osnovu datog unosa, čak i bez upotrebe dodatnih ključnih reči.

Možete ga nazvati velikim bratom izraza "switch": izrazi podudaranja mogu da vraćaju vrednosti, može kombinovati uslove, koristi stroga poređenja tipova i ne primorava nijedan tip.

izgleda ovako:

-Nasleđivanje privatnim metodama


Ranije je PHP koristio javne, zaštićene i privatne metode da primeni iste provere nasleđa. Drugim rečima, ista pravila potpisivanja metoda kao zaštićene i javne metode treba da budu praćene privatnim metodama. Zbog toga, časovi za decu ne bi mogli da koriste privatne metode.

Ova ažurirana funkcija PHP 8 je izmenila ponašanje, tako da se ove provere nasleđa više ne vrše na privatnim metodama. Pored toga, nije imalo smisla koristiti konačnu privatnu funkciju, tako da bi to sada izazvalo upozorenje:

Upozorenje: Privatne metode ne mogu biti konačne jer ih druge klase nikada ne zamenjuju!

 

-WeakMap

Na osnovu WeakMap-a, RFC-a predstavljenog u PHP-u 7.4, PHP 8 uvodi implementaciju WeakMap-a. WeakMap ima reference na objekte koji ne sprečavaju sakupljanje smeća iz tih objekata.

Oni takođe uvode keš memoriju koja sadrži reference na klase entiteta kako bi poboljšali performanse odnosa između entiteta, uzimajući primer ORM-ova. Sve dok ovaj keš ima referencu na njih, ovi objekti entiteta se ne mogu sakupljati kao smeće, iako je keš jedina stvar koja ih referencira.

Ako ovaj sloj za keširanje umesto toga koristi slabe reference i mape, PHP će prikupiti ove objekte kada na njih više ništa drugo ne upućuje. WeakMap mogu ponuditi bolji način rada sa ovim objektima sa više resursa, posebno u slučaju ORM-ova, koji mogu da obrađuju stotine, ako ne i hiljade entiteta u okviru zahteva. Evo kako izgledaju slabe mape, sa primerom iz RFC-a:

 

-Napomene za interne funkcije

Ovo je bio dugotrajan problem, i sa svim poboljšanjima napravljenim u PHP-u u prethodnim verzijama, konačno je bio rešen. Ovo implicira da će se kompletne informacije o tipu odraziti na interne funkcije i metode.

-ext-JSON uvek dostupan
Više nije moguće kompajlirati PHP bez omogućene ekstenzije JSON-a. Pošto se JSON tako često koristi, umesto da se prvo obezbedi da ekstenzija postoji, najbolji programeri uvek mogu da se oslone JSON.

-Greške doslednog tipa
U PHP-u, korisnički definisane funkcije pokreću TypeError, ali ne pokrece interne funkcije. Umesto toga emituju upozorenja i vraćaju null. Ponašanje internih funkcija je konzistentno u PHP 8.

-Operator @ više ne utišava fatalne greške
Ova promena može da otkrije greške koje su bile skrivene pre PHP 8. Na vašim proizvodnim serverima, obavezno postavite display_errors=Off.

-Podrazumevani nivo izveštavanja o grešci
Umesto svega osim E NOTICE i  E DEPRECATED, sada je E ALL. To znači da su mnoge greške ranije tiho ignorisale, ali su verovatno već postojale pre nego što je PHP 8 mogao da se pojavi.

-Namespaced između imena su jedan token
PHP se koristi za tumačenje svakog dela imenskog prostora (odvojenog obrnutom kosom crtom ) kao niz tokena. Ovaj RFC je promenio to ponašanje, što znači da se rezervisana imena sada mogu koristiti u prostorima imena.

-Saner numerički nizovi
Kada pronađe brojeve u nizovima, sistem tipa PHP pokušava da uradi nekoliko pametnih stvari. Ovo će učiniti ponašanje transparentnijim i doslednijim.

-Saner poređenja nizova sa brojevima
U PHP 8, ovaj RFC se bavi veoma čudnim slučajem gde 0 = = „foo“ rezultat je "true". Postoji nekoliko drugih ivičnih instanci poput ove i one su popravljene ovim RFC-om.

-Stabilno sortiranje
Algoritmi za sortiranje su bili nepouzdani pre PHP 8. To implicira da nije bilo garancije za redosled jednakih elemenata. Ponašanje svih funkcija sortiranja je modifikovano od strane PHP 8 u stabilno sortiranje.

 

Nove PHP funkcije:

Nova funkcija str_contains().
Neki će možda tvrditi da je to odavno zastarjelo, ali u suštini više ne moramo da se oslanjamo na strops() da bismo znali da li postoji još jedan niz unutar niza.

-Nove funkcije str_starts_with() i str_ends_with().
Ove dve funkcije su odavno zakasnile i sada su deo jezgra.

Nova funkcija fdiv().
Nova funkcija fdiv() ima sličnu sposobnost kao funkcije fmod() i intdiv(), što omogućava deljenje sa 0. Umesto dobijanja grešaka, dobićete INF, -INF ili NAN, u zavisnosti od scenarija.

get_debug_type() funkcija
Nova funkcija get_debug_type uvek vraća pravi izvorni tip promenljivih. Vraća povratna imena izvornog tipa, npr. int umesto integer, double umesto float.

get_debug_tipe() funkcija pomaže

  • Greška u izveštaju
  • Otklanjanje grešaka
  • Poslovna logika

Predstavljamo najnoviju verziju PHP-a 8 na Cloudways


Iako je Cloudways svojim korisnicima već predstavio PHP 8.0, ovo je sada dostupno svim novim i postojećim nalozima koji se nalaze u podešavanjima verzije. Preporučujemo vam da ažurirate svoju verziju PHP-a zbog novih funkcija koje su uvedene u jezik i da budete ažurirani na platformi, ali još uvek vam ne preporučujemo da nadogradite PHP 8 na vašim serverima za "live" produkciju, posebno ako koriste Laravel frejmvork ili bilo koji drugi CMS zasnovan na PHP-u. Ako napravite novu veb aplikaciju bez Laravel-a i Wordpress-a, možete slobodno isprobati PHP 8.

 

Često postavljana pitanja:

-Da li treba da nadogradim na PHP 8?
 PHP 8 obezbeđuje poboljšane performanse izvršavanja koda i vremenom će se proširivati i poboljšavati. Bolja poređenja će se osloboditi čestih grešaka i neočekivanih ponašanja koja često muče PHP programere. Rezultat je povećana brzina i optimizovane performanse. Poređenja između brojeva i nenumeričkih nizova sada rade.

-Šta se promenilo u PHP 8?
PHP 8 sadrži brojne naglaske i optimizacije uključujući imenovane argumente, tipove unije, atribute, promociju svojstava konstruktora, izraz podudaranja, nullsafe operator, JIT i poboljšanja u sistemu tipova, rukovanju greškama i doslednosti.

-Koja je razlika između PHP 7.4 i 8?
 Jedan od mnogih primera je da Wordpress na PHP 8.0 može da obradi 18,4% više zahteva u sekundi od PHP 7.4. Štaviše, Laravel na PHP 8.0 može da pokrene 8,5% više zahteva u sekundi od PHP 7.3. U slučaju da je vaš sajt ili aplikacija potpuno usklađena sa PHP 8.0. Pokazuje da je brzina obrade/kompilacije PHP 8 oštra u poređenju sa prethodnim verzijama.

 

Imate ideju?

Zakažite sastanak sa nama.